// 15.枚举类型.go
// 演示 GORM 框架中自定义枚举类型的使用
// 本文件展示了如何使用带有自定义JSON序列化的枚举类型
// 并演示了其在数据库操作和JSON序列化中的应用
package main

import (
	"encoding/json"      // JSON编解码包，用于将结构体序列化为JSON字符串
	"fmt"                // 格式化包，用于输出信息到控制台
	"gin-gorm/global"    // 全局配置包，提供数据库连接等功能
	"gin-gorm/models"    // 模型定义包，包含LogModel和Level枚举类型的定义
)

// UserZdy 函数演示自定义枚举类型的使用
// 该函数包含两个主要操作：创建日志记录（当前被注释掉）和查询并序列化日志记录
func UserZdy() {
	// 示例1: 创建带有枚举类型的日志记录（当前被注释掉）
	// 通过GORM的Create方法将包含Level枚举类型的日志记录保存到数据库
	// global.DB.Create(&models.LogModel{
	//	Title: "用户登录",  // 日志标题
	//	Level: models.InfoLevel, // 使用预定义的枚举常量作为日志级别
	// })

	// 示例2: 查询日志记录并演示自定义枚举类型的JSON序列化
	var log models.LogModel // 声明一个LogModel类型的变量用于存储查询结果
	global.DB.Take(&log)    // 从数据库中获取第一条日志记录
	// 将日志记录序列化为JSON格式
	// 这里会自动调用Level类型的MarshalJSON方法进行自定义序列化
	byteData, _ := json.Marshal(log)
	// 将序列化后的JSON字符串输出到控制台
	// 输出结果中Level字段将显示为包含value和label的对象
	fmt.Println(string(byteData))

}

// main 函数是程序的入口点
// 负责初始化数据库连接并调用演示函数
func main() {
	// 连接数据库
	// 调用global包中的Connect函数建立数据库连接
	global.Connect()
	
	// 迁移数据库表结构（当前被注释掉）
	// global.Migrate()会根据模型定义自动创建或更新数据库表
	// global.Migrate()
	
	// 调用演示函数执行枚举类型的操作
	UserZdy()
}
